﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Follow.Business;
using System.Windows.Forms;

namespace Follow.Adm
{
    public partial class Grupo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
         if (Session["idUsuario"] == null)
            {
                Response.Redirect("../Default.aspx");
            }
            else
            {
                Common.ValidaPermissoes valida = new Common.ValidaPermissoes();
                bool possuiPermissao = valida.validaPermissaoPorTela("Grupo", Convert.ToInt32(Session["idGrupoUsuario"]));

                if (possuiPermissao == false)
                {
                    Response.Redirect("../permissaoNegada.aspx");
                }

                if (Request["Msg"] != null)
                {
                    divMsg1.Visible = true;
                    divMsg1.Attributes["class"] = "isa_info";
                    lblMsg1.Text = Request["Msg"].ToString();
                }
                this.PopulaGrupos();
            }
        }

        private void PopulaGrupos()
        {
            GrupoBO bo = new GrupoBO();
            gvGrupo.DataSource = bo.findByDescricao(txtPesquisa.Text);
            gvGrupo.DataBind();
        }

        private void PopulaFuncionalidades(int idGrupo)
        {
            if (idGrupo == 0)
            {
                FuncionalidadeBO bo = new FuncionalidadeBO();
                cblFuncionalidades.DataSource = bo.findAll();
                cblFuncionalidades.DataTextField = "descricao";
                cblFuncionalidades.DataValueField = "idFuncionalidade";
                cblFuncionalidades.DataBind();
            }
            else
            {

                IList<Model.GrupoFuncionalidade> gf = new List<Model.GrupoFuncionalidade>();
                GrupoFuncionalidadeBO bo = new GrupoFuncionalidadeBO();
                gf = bo.findByGrupo(idGrupo);

                FuncionalidadeBO bo2 = new FuncionalidadeBO();
                cblFuncionalidades.DataSource = bo2.findAll();
                cblFuncionalidades.DataTextField = "descricao";
                cblFuncionalidades.DataValueField = "idFuncionalidade";
                cblFuncionalidades.DataBind();

                foreach (Model.GrupoFuncionalidade grupoFuncionalidade in gf)
                {
                    for (int i = 0; i < cblFuncionalidades.Items.Count; i++)
                    {
                        if (grupoFuncionalidade.IDFuncionalidade == Convert.ToInt32(cblFuncionalidades.Items[i].Value))
                        {
                            cblFuncionalidades.Items[i].Selected = true;
                        }
                    }
                }
            }
        }

        protected void btnPesquisa_Click(object sender, EventArgs e)
        {
            this.PopulaGrupos();
            divMsg1.Visible = false;
        }

        protected void btnIncluir_Click(object sender, EventArgs e)
        {
            mvGrupo.ActiveViewIndex = 1;
            IDGrupo.Value = "";
            txtDescricao.Text = "";
            PopulaFuncionalidades(0);
            divMsg2.Visible = false;
        }

        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            IList<Model.Grupo> GruposLista = new List<Model.Grupo>();
            Model.Grupo grupo = new Model.Grupo();
            try
            {
                GrupoBO bo = new GrupoBO();
                if (IDGrupo.Value != "")
                {
                    grupo.IDGrupo = Int32.Parse(IDGrupo.Value);
                }
                grupo.Descricao = txtDescricao.Text;
                GruposLista = bo.save(grupo, Convert.ToInt32(Session["idUsuario"]));

                int idGrupo = 0;
                foreach (Model.Grupo g in GruposLista)
                {
                    idGrupo = g.IDGrupo;
                }

                for (int i = 0; i < cblFuncionalidades.Items.Count; i++)
                {
                    if (cblFuncionalidades.Items[i].Selected)
                    {
                        Model.GrupoFuncionalidade grupoFuncionalidade = new Model.GrupoFuncionalidade();

                        grupoFuncionalidade.IDGrupo = idGrupo;
                        grupoFuncionalidade.IDFuncionalidade = Convert.ToInt32(cblFuncionalidades.Items[i].Value);

                        GrupoFuncionalidadeBO boGrupoFuncionalidade = new GrupoFuncionalidadeBO();

                        boGrupoFuncionalidade.insert(grupoFuncionalidade, Convert.ToInt32(Session["idGrupoUsuario"]));
                    }
                }
                PopulaGrupos();
                mvGrupo.ActiveViewIndex = 0;
                divMsg1.Visible = true;
                divMsg1.Attributes["class"] = "div_success";
                lblMsg1.Text = "Grupo salvo com sucesso!";
                lblDescricao.Text = "";
                IDGrupo.Value = "";
            }
            catch (Exception ex)
            {
                divMsg2.Visible = true;
                if (ex.Message.IndexOf("duplicate") > -1)
                {
                    divMsg2.Attributes["class"] = "div_warning";
                    lblMsg2.Text = "Grupo já cadastrado no sistema.";
                }
                else
                {
                    divMsg2.Attributes["class"] = "div_sucesso";
                    lblMsg2.Text = "Erro: " + ex.Message;
                }
            }
        }

        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            mvGrupo.ActiveViewIndex = 0;
            divMsg1.Visible = false;
            divMsg2.Visible = false;
        }

        protected void gvGrupo_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName.Equals("Editar"))
            {
                Int32 id = Convert.ToInt32(this.gvGrupo.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                //Response.Redirect("~/Adm/Gruopo.aspx?IDGrupo=" + id.ToString());

                if (id != null)
                {
                    if (id > 0)
                    {
                        GrupoBO bo = new GrupoBO();
                        Model.Grupo Grupo = bo.load(id);
                        txtDescricao.Text = Grupo.Descricao;
                        IDGrupo.Value = Grupo.IDGrupo.ToString();
                        lblTitulo2.Text = "Editar grupo";
                        PopulaFuncionalidades(Grupo.IDGrupo);
                        mvGrupo.ActiveViewIndex = 1;
                        divMsg2.Visible = false;
                    }
                }
            }
            else if (e.CommandName.Equals("Excluir"))
            {
                if (System.Windows.Forms.MessageBox.Show("Tem certeza que deseja excluir?", "Excluir", MessageBoxButtons.OKCancel,
                    MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.ServiceNotification) ==
                    System.Windows.Forms.DialogResult.OK)
                {
                    divMsg1.Visible = false;
                    Int32 id = 0;
                    try
                    {
                        id = Convert.ToInt32(this.gvGrupo.DataKeys[Convert.ToInt32(e.CommandArgument)].Value);
                    }
                    catch (Exception ex)
                    {
                        divMsg1.Attributes["class"] = "div_error";
                        lblMsg1.Text = "Erro: " + ex.Message;
                        return;
                    }
                    GrupoBO bo = new GrupoBO();
                    try
                    {
                        bo.delete(id, Convert.ToInt32(Session["idUsuario"]));
                        this.PopulaGrupos();
                        divMsg1.Attributes["class"] = "isa_success";
                        lblMsg1.Text = "Grupo excluído com sucesso!";
                    }
                    catch (Exception ex)
                    {
                        divMsg1.Attributes["class"] = "div_error";
                        lblMsg1.Text = "Erro: " + ex.Message;
                        return;
                    }
                }
            }
        }


        protected void gvGrupo_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvGrupo.PageIndex = e.NewPageIndex;
            PopulaGrupos();
        }
    }
}